Giao thức trung tâm của X Window Giao thức và kiến trúc của Hệ thống X Window

Bài chi tiết: X Window core protocol

Giao thông giữa trình chủ và các trình khách được thực hiện thông qua việc trao đổi những gói dữ kiện trên một kênh tuyến của mạng lưới truyền thông. Trình khách thiết lập kết nối và gửi gói dữ kiện đầu tiên sang cho trình chủ. Trình chủ hồi âm bằng một gói dữ kiện, thông báo cho trình khách biết hoặc là nó chấp nhận hay từ chối yêu cầu kết nối của trình khách, hoặc nó yêu cầu trình khách phải xác minh và chứng thực thêm. Nếu kết nối được chấp thuận, gói dữ kiện thông báo việc chấp thuận được sẽ được gắn những dữ liệu mà trình khách cần có cho những lần giao lưu tiếp theo với trình chủ.

Sau khi kết nối đã được thành lập, có bốn loại gói dữ liệu được trao đổi qua lại giữa trình khách và trình chủ, thông qua kênh truyền thông:

  1. Yêu cầu: (Request) Trình khách yêu cầu tin tức từ trình chủ, hoặc yêu cầu trình chủ thao tác một chức năng nào đó.
  2. Trả lời: (Reply) Trình chủ hồi âm yêu cầu của trình khách. Không phải yêu cầu nào của trình khách cũng được trình chủ hồi âm.
  3. Sự kiện: (Event) Trình chủ gửi một "sự kiện" hay một "tác động" nào đấy đến cho trình khách, chẳng hạn như: tác động của bàn phím, của chuột, hoặc do một cửa sổ bị di chuyển, thay đổi cỡ, hoặc bị phô trương ra (không bị che lấp nữa).
  4. Báo lỗi: (Error) Trình chủ gửi một gói dữ liệu báo lỗi. Do các gói dữ liệu yêu cầu của trình khách gửi sang phải xếp hàng, đợi trình chủ đối phó với từng yêu cầu lần lượt, các gói dữ kiện báo lỗi được tạo nên bởi một yêu cầu nào đó không phải bao giờ cũng được gửi về cho trình khách ngay tức khắc.

Trình chủ X cung ứng một số dịch vụ căn bản. Trình khách nhận biết được những tính năng phức tạp khác, mà trình chủ có thể làm, thông qua sự tương giao với trình chủ.

Cửa sổ

Một ví dụ về phương pháp bố trí các cửa sổ: 1 là cửa sổ gốc, bao trùm toàn bộ màn hình; 2 và 3 là cửa sổ ở tầng trên cùng; 4 và 5 là cửa sổ con của cửa sổ 2. Những phần cửa sổ ở bên ngoài cửa sổ mẹ của nó bị che lấp, và không thấy được.

Khung hình được gọi là cửa sổ trong các hệ thống giao diện đồ họa người dùng (graphical user interface) khác, được gọi là cửa sổ ở "tầng cao nhất" (hay tầng trên cùng) (top-level window) trong Hệ thống X Window. Từ cửa sổ còn được dùng cho những cửa sổ nằm bên trong một cửa sổ khác, có nghĩa nó là "cửa sổ con" của một "cửa sổ mẹ". (subwindows of a parent window). Những phần tử đồ họa như các nút bấm (buttons), trình đơn (menus), hình biểu trưng (icons) v.v đều được thể hiện bằng cửa sổ.

Một cửa sổ con chỉ có thể được tạo nên do một cửa sổ mẹ nào đó. Điều này có nghĩa là tất cả các cửa sổ đều được bố trí theo dạng thức phả hệ, có nghĩa là chúng được bố trí theo một hệ thống cấp bậc. Gốc của hệ thống cấp bậc này được gọi là cửa sổ gốc (root window), và được trình chủ tự động tạo nên. Những cửa sổ ở tầng trên cùng (top-level windows) chính là những cửa sổ con trực tiếp của cửa sổ gốc. Hiển nhiên, cửa sổ gốc chiếm diện tích bằng diện tích của màn hình, và nằm ở phía sau cùng, sau các cửa sổ khác.

Định danh

Tất cả dữ liệu về các cửa sổ, phông chữ v.v. đều được lưu trữ trong trình chủ. Trình khách biết định danh (identifiers) của các đối tượng (objects) này. Những định danh đều là những số nguyên. Trình khách dùng những con số này để điểm chỉ một đối tượng cụ thể nào đấy khi trình khách tương tác với trình chủ. Chẳng hạn, khi trình khách muốn tạo một cửa sổ mới, trình khách yêu cầu trình chủ tạo cho nó một cửa sổ với định danh mà nó đưa cho. Trình chủ, sau khi tạo nên cửa sổ mới rồi, liên kết cửa sổ ấy với định danh mà nó nhận được. Trình khách dùng định danh ấy để đề bạt các yêu cầu, chẳng hạn như vẽ một chuỗi các ký tự (a string) vào cửa sổ với định danh mà nó đã gửi sang cho trình chủ.

Các định danh mà trình chủ giữ đều là những định danh độc nhất vô nhị, không có định danh nào bị lặp lại. Tính độc nhất của các định danh không chỉ dành riêng cho một trình khách nào đó mà thôi, song nó bao trùm tất cả, và không có hai cửa sổ nào có cùng một định danh giống nhau, cho dù chúng được tạo nên bởi hai trình khách khác nhau. Một trình khách có thể truy cập một đối tượng nào đó bằng định danh của đối tượng ấy, cho dù đối tượng ấy được tạo nên bởi yêu cầu của một trình khách khác.

Đặc tính và sở hữu

Cửa sổ nào cũng có một loạt những đặc tính đã được xác định trước, cùng một loạt các sở hữu. Tất cả những dữ liệu và đặc tính này đều được lưu trữ bên trình chủ. Trình khách nào cũng có thể truy cập được những dữ liệu và đặc tính của các cửa sổ bằng cách gửi những yêu cầu thích hợp sang cho nó. Đặc tính là những dữ liệu về cửa sổ, như cỡ của nó, vị trí tọa độ trên màn hình, màu nền v.v. Sở hữu dữ liệu bao gồm những mảng dữ liệu gắn kèm theo cửa sổ. Ngược lại với các đặc tính, các sở hữu không có tác động hoặc ý nghĩa gì ở tầng giao thức trung tâm của X Window (X Window core protocol). Trình khách có thể lưu trữ bất cứ dữ liệu nào trong phần sở hữu của một cửa sổ.

Đặc điểm của sở hữu là mỗi sở hữu có một cái tên, kiểu dữ liệu, và một giá trị được gán cho. Sở hữu giống như biến số (variables) trong các ngôn ngữ lập trình mệnh lệnh (imperative programming language) ở chỗ chương trình ứng dụng có thể tạo nên một sở hữu mới, cho nó một cái tên, một kiểu dữ liệu, rồi lưu trữ một giá trị ở trong đó. Sở hữu được liên kết với cửa sổ: hai sở hữu có cùng một tên, có thể tồn tại trên hai cửa sổ khác nhau, với kiểu dữ liệu và giá trị khác nhau.

Sở hữu thường được dùng trong giao thông liên trình khách (inter-client communication). Chẳng hạn, sở hữu với cái tên WM_NAME được dùng để lưu trữ tên của cửa sổ; chương trình quản lý cửa sổ thường đọc sở hữu này và hiển thị tên của cửa sổ ở trên đầu nó.

Sở hữu của sổ có thể được biểu hiện dùng trình ứng dụng xprop. Cụ thể, xprop -root sẽ hiển thị các sở hữu của cửa sổ gốc cùng với tài nguyên của X (thông số cho trình ứng dụng).

Sự kiện hoặc tác động

Những sự kiện hoặc những tác động xảy ra bên trình chủ sẽ được thông báo cho trình khách qua những gói dữ liệu, để cho trình khách biết và xử lý, đặc biệt là những sự kiện hoặc tác động mà trình khách quan tâm đến. Trình khách còn có thể yêu cầu trình chủ gửi tác động sang cho trình khách khác; đây chính là phương pháp mà các trình khách giao thông với nhau. Chẳng hạn, khi một trình khách yêu cầu lấy đoạn văn bản đang được chọn, yêu cầu này được biến thành một sự kiện, gói trong một gói dữ liệu, và gửi sang cho trình khách hiện đang xử lý cửa sổ có đoạn văn bản được chọn đó.

Dưới những điều kiện nhất định nào đó, nội dung của một cửa sổ có thể sẽ bị xóa đi (ví dụ nếu cửa sổ bị che lấp). Khi khu vực, nơi nội dung đã bị xóa đi, lại được phô ra, trình khách tạo một sự kiện Expose, thông báo cho trình khách, báo với nó rằng phần cửa sổ đó phải được vẽ ra.

Những sự kiện khác thường được dùng để thông báo cho trình khách các dữ liệu nhập vào do bàn phím và chuột gây ra, hoặc do những yêu cầu tạo cửa sổ mới v.v.

Một số những sự kiện sẽ luôn luôn được gửi cho các trình khách, còn lại hầu hết các sự kiện khác chỉ được gửi cho trình khách nếu trình khách biểu lộ ý kiến trước đó, rằng nó quan tâm đến những sự kiện đã xảy ra, bởi vì các trình khách có khi chỉ quan tâm đến một số những sự kiện nào đó mà thôi. Lấy ví dụ, một trình khách có thể chỉ quan tâm đến các tác động của bàn phím, mà không để ý gì đến các tác động của chuột.

Chế độ màu sắc

Phương pháp mà hệ thống X Window dùng để xử lý màu sắc đôi khi làm cho người dùng lúng túng. Trong quá khứ, X có hỗ trợ vài chế độ màu sắc khác nhau. Đa số các trình ứng dụng hiện đại dùng Màu thật (Truecolour) (màu 24-bit, 8 bit một màu, với ba màu cơ bản, đỏ,lục và lam (red, green and blue)1), song những trình ứng dụng cũ, hoặc những trình ứng dụng chuyên môn có thể lại phải dùng một chế độ màu khác. Rất nhiều chương trình ứng dụng chuyên môn được bán trên thị trường dùng "màu nhân tạo" (PseudoColor).

Giao thức X11 dùng một số nguyên 32-bit không dấu2 (32-bit unsigned integer) để biểu thị giá trị của một màu trong hầu hết các thao tác đồ họa, và gọi nó là "giá trị của điểm ảnh" (pixelvalue). Khi phải chuyển đổi cường độ của các màu cơ bản, người ta dùng một đơn vị số nguyên 16 bit3 cho mỗi màu. Những phương thức biểu hiện màu liệt kê dưới đây là những cái hiện được hỗ trợ. Trên một thiết bị cụ thể nào đấy, không phải phương thức nào cũng dùng được:

  • Màu trực tiếp: (DirectColor) Một điểm ảnh được phân tách ra làm ba phần riêng biệt: đỏ, lục và xanh. Mỗi phần là một mục lục chỉ thị vào một bảng màu riêng. Các giá trị trong bảng màu không cố định và có thể thay đổi được.
    • Màu thật: (TrueColor) Tương tự như màu trực tiếp ở trên, ngoại trừ một điểm, các giá trị trong bảng màu được phần cứng định trước và không thể thay đổi được. Thông thường thì mỗi một bảng màu của đỏ, lục và lam chứa các giá trị tăng dần theo cường độ của màu, gần như những giá trị trên một đường tuyến tính.
  • Gam màu ghi: (GrayScale) Giá trị của một điểm ảnh trên màn hình (pixel) là mục lục chỉ thị của một bảng màu duy nhất, trong đó chứa các giá trị cường độ của màu ghi. Các giá trị trong bảng màu có thể thay đổi được.
    • Màu ghi cố định: (StaticGray) Tương tự như Gam màu ghi ở trên, ngoại trừ, các giá trị trong bảng màu được phần cứng cố định từ trước, và không thể thay đổi được.
  • Màu nhân tạo/màu giả (PseudoColor) (Nén ảnh điểm - tiếng Anh là Chunky): Giá trị của một điểm ảnh trên màn hình (pixel) là mục lục chỉ thị của một bảng màu, trong đó chứa các giá trị cường độ của các màu. Các giá trị trong bảng màu có thể thay đổi được.
    • Màu cố định: (StaticColor) Tương tự như Màu nhân tạo ở trên, ngoại trừ, các giá trị trong bảng màu được phần cứng cố định từ trước, và không thể thay đổi được.
Bài chi tiết: các tên màu X11